{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torchvision.datasets as datasets\n",
    "import torch.utils.data as data\n",
    "import torchvision.models as models\n",
    "import torchvision.transforms as transforms\n",
    "from torch.autograd import Variable\n",
    "import os\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "class TinyImageDataset(Dataset):\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loading stored model ...\n",
      "Loaded model successfully.\n",
      "Reading data...\n",
      "Loaded: /Users/lsouza/nta/datasets/tiny-imagenet-200/val\n"
     ]
    }
   ],
   "source": [
    "print(\"Loading stored model ...\")\n",
    "model = models.resnet18(pretrained=True)\n",
    "print(\"Loaded model successfully.\")\n",
    "\n",
    "# load data set\n",
    "print(\"Reading data...\")\n",
    "val_dir = os.path.expanduser('~/nta/datasets/tiny-imagenet-200/val')\n",
    "val_dataset = datasets.ImageFolder(val_dir, transform=transforms.ToTensor())\n",
    "val_loader = data.DataLoader(val_dataset, batch_size=128)\n",
    "print(\"Loaded: %s\" % val_dir)"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "correct = 0\n",
    "total = 0\n",
    "for batch in val_loader:\n",
    "    images, labels = batch\n",
    "    outputs = model(Variable(images))\n",
    "    _, predicted = torch.max(outputs.data, 1)\n",
    "    total += labels.size(0)\n",
    "    print(labels.float().mean().item())\n",
    "    correct += (predicted == labels).sum().item()\n",
    "    print('Progress --- total: %s, correct: %s' % (total, correct))\n",
    "print('Accuracy of the network on the 10000 test images: %s %%', (100 * correct / total))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([929, 107, 646, 917,   7, 990, 354, 981, 702, 530, 321, 508, 573, 584,\n",
       "        567, 611])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predicted"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch.utils.data.dataloader.DataLoader at 0x12d4499b0>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val_loader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([128, 3, 64, 64])"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "input, target = next(iter(val_loader))\n",
    "input.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(<matplotlib.image.AxesImage at 0x1340194a8>, tensor(0))"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "rand = np.random.randint(input.shape[0])\n",
    "plt.imshow(input[rand].permute(1,2,0).numpy()), target[rand]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0])"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
